package com.liu.controller;

import com.liu.vo.DataView;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

@Controller
public class CommonController {

    //定义目标路径
    @Value("${Ceps.path}")
    private String BASE_PATH;

    //定义访问图片的路径
//    private static final String SERVER_PATH="http://localhost:8080/upload/";

    @RequestMapping(value = "/uploadImage",method = RequestMethod.POST)
    @ResponseBody
    public Map<String, Object> uploadFile(HttpServletRequest servletRequest, @RequestParam("file") MultipartFile file)
            throws IOException {
        // 如果文件内容不为空，则写入上传路径
        if (!file.isEmpty()) {
            //取得原文件名字
            String fileName = file.getOriginalFilename();
            //取得文件扩展名
            String suffix = fileName.substring(fileName.lastIndexOf("."));
            //提取系统时间作为新文件名
            String prefix = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date().getTime());
            //保存路径
            // 上传文件名
            String filename = prefix+suffix;
            File filepath = new File(BASE_PATH, filename);
            // 判断路径是否存在,没有创建
            if (!filepath.getParentFile().exists()) {
                filepath.getParentFile().mkdirs();
            }
            // 将上传文件保存到一个目标文档中
            File file1 = new File(BASE_PATH + File.separator + filename);
            file.transferTo(file1);
            HashMap<String, Object> res = new HashMap<>();
            // 返回的是一个url对象,图片名称
            res.put("url", filename);
            return res;
        } else {
            return null;
        }
    }
//    @RequestMapping("/uploadImage")
//    @ResponseBody
//    public DataView upload(MultipartFile file){
//        DataView dataView = new DataView();
//
//        if(file == null){
//            dataView.setCode(100);
//            dataView.setMsg("上传失败");
//            return dataView;
//        }
//        //获取上传文件的名称
//        String filename = file.getOriginalFilename();
//
//        //为了保证图片在服务器中名字的唯一性，这个是我们要用UUID来对filename进行改写
//        String uuid = UUID.randomUUID().toString().replace("-","");
//
//        //将生成的uuid和filename进行拼接
//        String newFilename = uuid + "-" + filename;
//
//        //创建一个文件实例对象
//        File image = new File(BASE_PATH,newFilename);
//
//        if(!image.exists()){
//            //文件不存在，直接创建一个目录
//            image.mkdirs();
//        }
//
//        try {
//            file.transferTo(image);
//        } catch (IOException e) {
//            return null;
//        }
//
//        dataView.setCode(200);
//        dataView.setMsg("上传成功");
//        HashMap map = new HashMap<>();
//        map.put("src",newFilename);
//        dataView.setData(map);
//        return dataView;
//    }
//
//    @GetMapping("/downloadImage")
//    public void download(String name, HttpServletResponse response){
//        try {
//            //输入流，通过输入流读取文件内容  这里的name是前台用户需要下载的文件的文件名
//            //new File(basePath + name) 是为了从存储图片的地方获取用户需要的图片对象
//            FileInputStream fileInputStream = new FileInputStream(new File(BASE_PATH + name));
//            //输出流，通过输出流将文件写回浏览器
//            ServletOutputStream outputStream = response.getOutputStream();
//
//            //设置写回去的文件类型
//            response.setContentType("image/jpeg");
//
//            //定义缓存区，准备读写文件
//            int len  = 0 ;
//            byte[] buff = new byte[1024];
//            while ((len = fileInputStream.read(buff)) != -1){
//                outputStream.write(buff,0,len);
//                outputStream.flush();
//            }
//            //关流
//            outputStream.close();
//            fileInputStream.close();
//
//        }catch (Exception e){
//            e.printStackTrace();
//        }
//    }

}
